<?php
/**
 * Created by PhpStorm.
 * User: aron
 * Date: 2019/5/6
 * Time: 4:07 PM
 */

define("DEBUG_MODE", TRUE);

/**
 * 外部可以在导入该文件之前做如下的定义取消DEBUG显示错误模式
 * define("DEBUG_MODE_SHOW_ERROR", FALSE);
 */
if (!defined("DEBUG_MODE_SHOW_ERROR")) {
    define("DEBUG_MODE_SHOW_ERROR", TRUE);
}


// 错误信息进行输出的设置
if (DEBUG_MODE && DEBUG_MODE_SHOW_ERROR) {
    ini_set('display_errors',1);            //错误信息
    ini_set('display_startup_errors',1);    //php启动错误信息
    error_reporting(-1);                    //打印出所有的 错误信息
    ini_set('error_log', dirname(__FILE__) . '/error_log.txt'); //将出错信息输出到一个文本文件
}

function yt_dp() {
    yt_debug_print_break_line();
}

function yt_debug_print_break_line() {
    yt_debug_print_break_line_for_html();
    yt_debug_print_break_line_for_ascii();
}

function yt_debug_print_break_line_for_ascii() {
    echo "\r\n";
}

function yt_debug_print_break_line_for_html() {
    echo "<br>";
}


class DebugUtil
{
    public static function printDebugSeperator($title = "")
    {
        if (DEBUG_MODE) {
            echo "<hr>";
            if (!empty($title)) {
                echo $title;
            }
            echo "<br>\r\n";
        }
    }

    public static function printArrayWithTable($array, $caption = "")
    {
        echo "<table border='1px solid gray'>";

        echo "<tr class='table-header' style='text-align: center'>";
        echo "<td colspan='2'>";
        echo $caption;
        echo "</td>";
        echo "</tr>";

        foreach ($array as $key => $value) {
            echo "<tr>";
            echo "<td>";
            echo $key;
            echo "</td>";
            echo "<td>";
            if (is_array($value)) {
                DebugUtil::printArray($value);
            } else {
                echo $value;
            }
            echo "</td>";
            echo "</tr>";
        }

        echo "</table>";
    }

    static function printArray($array)
    {
        DebugUtil::doPrintArrayRecursively($array, 0);
    }

    /**
     * 递归打印数组，使用缩进打印层级结构
     * @param $array 需要打印的数组
     * @param $depth 所在的层级
     * @param int $maxDepth 最大的层级，防止数组的循环引用导致的无限递归调用的问题
     */
    private static function doPrintArrayRecursively($array, $depth, $maxDepth = 5)
    {
        foreach ($array as $index => $item) {
            if (is_array($item)) {
                // 打印缩进
                for ($i = 0; $i < $depth; $i++) {
                    echo "&nbsp;&nbsp;&nbsp;";
                }
                echo "$index";
                echo "=>";
                echo "<br>\r\n";
                if ($depth < $maxDepth) {
                    DebugUtil::doPrintArrayRecursively($item, $depth + 1);
                }
            } else {
                // 打印缩进
                for ($i = 0; $i < $depth; $i++) {
                    echo "&nbsp;&nbsp;&nbsp;";
                }
                // 打印内容
                echo "$index => $item";
                echo "<br>\r\n";
            }
        }
    }
}
